home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1984-07-27 | 6.3 KB | 170 lines
1 'PACWORM Written by Richard Addison on October 18, 1982 2 KEY OFF:SCREEN 0,1,0:WIDTH 40:SCREEN 0,1,0:COLOR 15,0,0:CLS:DEFINT A-Z 4 GOSUB 10900 10 DEFINT A-Z:DIM D(1023),X(3),Y(3),WS$(3,3),HEAD$(3):HISCORE!=100 20 RESTORE:Y(0)=-1:X(1)=1:Y(2)=1:X(3)=-1 30 FOR CD=0 TO 3:FOR ND=0 TO 3:READ WS$(CD,ND):NEXT:NEXT 32 FOR ND=0 TO 3:READ HEAD$(ND):NEXT 40 MOVE$=CHR$(0)+"H8"+CHR$(0)+"M6"+CHR$(0)+"P2"+CHR$(0)+"K4"+CHR$(0)+"R0"+CHR$(0)+"S." 90 COLOR 15,0,0:CLS 700 SCORE!=0:WORMS=2:PLUS=1:FIRST=-1:LEVEL=1:NXTWRM!=50 800 BDOOR=0:TOGO=10:EXTRA=0:GOSUB 5000 810 GOSUB 6000 900 HX=20:HY=21:HP=0:TX=HX:TY=HY:TP=0:CD=0:ND=0:ADD=7 980 FOR J=0 TO 1999:NEXT 990 COLOR 15:WHILE INKEY$<>"":WEND:GOTO 1100 1000 K$=INKEY$:MF=0:IF K$="" THEN 1100 1002 IF K$=" " THEN K$="":WHILE K$="":K$=INKEY$:WEND 1010 T=INSTR(MOVE$,K$):IF T=0 THEN 1000 1020 T=(T-1)\3:IF T=4 THEN ND=(CD-1)AND 3:GOTO 1100 1030 IF T=5 THEN ND=(CD+1)AND 3:GOTO 1100 1040 IF (T AND 1)<>(CD AND 1) THEN ND=T ELSE 1000 1100 COLOR 10:OY=HY:OX=HX:D(HP)=ND:HP=(HP+1)AND 1023 1110 HX=HX+X(ND):HY=HY+Y(ND):OLD=SCREEN(HY,HX) 1120 IF ADD THEN SOUND 220,0.4 ELSE SOUND 110,0.4 1130 LOCATE HY,HX:PRINT HEAD$(ND);:LOCATE OY,OX:IF GULP THEN PRINT"CSRLIN";:GULP=0 ELSE PRINT WS$(CD,ND); 1160 CD=ND:IF OLD=254 THEN ADD=ADD+7:GOSUB 6500:GULP=-1:GOTO 1200 1170 IF OLD<>32 THEN 2000 1180 IF HY<2 THEN 7000 1200 IF ADD>0 THEN ADD=ADD-1:GOTO 1300 1210 LOCATE TY,TX:PRINT" "; 1220 TX=TX+X(D(TP)):TY=TY+Y(D(TP)):TP=(TP+1)AND 1023 1230 IF FDOOR THEN GOSUB 5600 1300 IF BDOOR THEN 1400 ELSE CNT=CNT-1:IF CNT>0 THEN 1400 1310 CNT=2:COLOR 5:LOCATE 21,TIME+1:PRINT"CSRLIN";:TIME=TIME-1:IF TIME=0 THEN TOGO=TOGO+3:GOSUB 6000:GOSUB 6000:GOSUB 6000:GOSUB 6600:IF EXTRA<1 THEN EXTRA=4 ELSE EXTRA=EXTRA+3 1400 FOR J=0 TO 2^(7-LEVEL):NEXT:GOTO 1000 2000 SOUND 37,4:FIRST=0:GOSUB 6600:WORMS=WORMS-1:IF WORMS<0 THEN 2200 2100 LOCATE 25,7:COLOR 15:PRINT"PRESS <SPACE> TO CONTINUE"; 2110 K$=INKEY$:IF K$=CHR$(27) THEN GOSUB 9000:GOTO 2200 2120 IF K$<>" " THEN 2110 2130 GOTO 800 2200 IF SCORE!>HISCORE! THEN HISCORE!=SCORE! 2202 COLOR 12:LOCATE 10,15:PRINT"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE 2204 LOCATE,15:PRINT"OPENGAME OVEROPEN 2206 LOCATE,15:PRINT"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD 2210 LOCATE 25,9:COLOR 15:PRINT"PRESS <ENTER> TO PLAY"; 2220 K$=INKEY$:IF K$=CHR$(27) THEN 9000 2230 IF K$<>CHR$(13) THEN 2220 2240 GOTO 700 4000 GOSUB 5000:GOSUB 5500:END 5000 'MAKE PLAYING FIELD 5010 COLOR 5,0:CLS:OUT 984,32:PRINT STRING$(39,219); 5020 FOR I=2 TO 20:LOCATE I,1:PRINT"CSRLIN";:LOCATE I,39:PRINT"CSRLIN";:NEXT 5030 COLOR 5,4:LOCATE 21,1:PRINT"CSRLIN"STRING$(37,223)"CSRLIN";:COLOR ,0:TIME=37:CNT=2 5100 K$=STRING$(19,219):T$=LEFT$(K$,9):IF LEVEL>1 AND LEVEL <5 THEN LOCATE 11,11:PRINT K$; 5110 IF LEVEL=3 OR LEVEL=5 OR LEVEL=7 THEN FOR J=6 TO 16:LOCATE J,20:PRINT"CSRLIN";:NEXT 5112 IF LEVEL=5 OR LEVEL=7 OR LEVEL=8 THEN FOR J=6 TO 16:LOCATE J,11:PRINT"CSRLIN";:LOCATE ,29:PRINT"CSRLIN";:NEXT 5120 IF LEVEL=4 THEN LOCATE 6,11:PRINT K$;:LOCATE 16,11:PRINT K$;:FOR J=7 TO 15:LOCATE J,11:PRINT"CSRLIN";:NEXT 5130 IF LEVEL=5 THEN LOCATE 6,11:PRINT K$; 5140 IF LEVEL=6 THEN LOCATE 6,20:PRINT K$;:LOCATE 11,2:PRINT K$;:LOCATE 16,20:PRINT K$; 5150 IF LEVEL=7 THEN LOCATE 6,12:PRINT T$;:LOCATE 16,20:PRINT T$;:FOR J=6 TO 16:LOCATE J,11:PRINT"CSRLIN";:LOCATE J,29:PRINT"CSRLIN";:NEXT 5160 IF LEVEL=8 THEN LOCATE 16,2:PRINT T$;:LOCATE 6,12:PRINT T$;:LOCATE 16,20:PRINT T$;:LOCATE 6,30:PRINT T$; 5170 IF LEVEL>8 THEN FOR J=2 TO 11:LOCATE J,6:PRINT"CSRLIN";:LOCATE,16:PRINT"CSRLIN";:LOCATE,24:PRINT"CSRLIN";:LOCATE,34:PRINT"CSRLIN";:LOCATE J+9,11:PRINT"CSRLIN";:LOCATE,29:PRINT"CSRLIN";:NEXT 5400 LOCATE 22,3:COLOR 4:PRINT"<UNK! {FE22}>;:COLOR 7:PRINT" TO GO:"; 5410 LOCATE 23,1:COLOR 10:PRINT"THENTHEN<0xB5!>";:COLOR 7:PRINT" TO GO:"; 5420 LOCATE 24,5:PRINT"SCORE:";:COLOR 15:PRINT" 0"; 5430 COLOR 7:LOCATE 22,23:COLOR 4:PRINT"<UNK! {FE22}>;:COLOR 7:PRINT" VALUE:"; 5440 LOCATE 23,25:PRINT"LEVEL:"; 5450 LOCATE 24,20:PRINT"HIGH SCORE:";:COLOR 15:PRINT" 0"; 5500 LOCATE 21,18:COLOR 13:PRINT"CSRLINCSRLIN CSRLINCSRLIN";:FDOOR=-1:GOSUB 6600 5510 OUT 984,40:RETURN 5600 LOCATE 21,18:COLOR 5,4:PRINT"<0xDF!><0xDF!><0xDF!><0xDF!><0xDF!>";:FDOOR=0:COLOR ,0:RETURN 5700 LOCATE 1,18:COLOR 13:PRINT"CSRLINCSRLIN CSRLINCSRLIN"; 5702 SOUND 55,1:SOUND 82,1:SOUND 110,1:SOUND 165,1:SOUND 220,1 5710 LOCATE 21,2:COLOR 5:PRINT STRING$(37,219);:BDOOR=-1:RETURN 6000 AX=INT(RND*36)+2:AY=INT(RND*18)+2 6010 IF SCREEN(AY,AX)<>32 THEN 6000 6020 LOCATE AY,AX:COLOR 20:PRINT"<UNK! {FE22}>; 6022 SOUND 220,0.2:SOUND 440,0.2:SOUND 880,0.2:SOUND 1760,0.2 6030 IF TIME=0 THEN LOCATE 21,2:COLOR 5,4:PRINT STRING$(37,223);:COLOR ,0:TIME=37:CNT=2 6090 RETURN 6500 TOGO=TOGO-1:IF EXTRA THEN EXTRA=EXTRA-1 6510 SCORE!=SCORE!+PLUS:IF SCORE!>=NXTWRM! THEN WORMS=WORMS+1:NXTWRM!=NXTWRM!*2:SOUND 1760,2 6590 GOSUB 6600:IF TOGO<1 THEN 5700 ELSE TIME=0:IF EXTRA THEN 6030 ELSE 6000 6600 COLOR 15:IF SCORE! THEN LOCATE 24,11:PRINT USING"#######";SCORE!*100; 6610 COLOR 15:LOCATE 23,11:PRINT WORMS; 6620 LOCATE 22,11:PRINT TOGO; 6630 LOCATE 22,31:PRINT STR$(PLUS)"00"; 6640 LOCATE 23,31:PRINT LEVEL; 6650 LOCATE 24,31:PRINT USING"#######";HISCORE!*100; 6690 RETURN 7000 BDOOR=0:PLUS=PLUS+PLUS:IF NOT FIRST THEN 7100 7010 COLOR 12:K$=" BONUS: "+STR$(PLUS)+"00 ":T=19-LEN(K$)\2 7020 LOCATE 10,T:PRINT"KEY"STRING$(LEN(K$),205)"CLOSE"; 7030 LOCATE 11,T:PRINT"OPEN"K$"OPEN"; 7040 LOCATE 12,T:PRINT"SCREEN"STRING$(LEN(K$),205)"LOAD"; 7050 SCORE=SCORE+PLUS:GOSUB 6600 7100 COLOR 10:LOCATE 1,20:PRINT"OPEN"; 7110 OLD=SCREEN(TY,TX,1):IF OLD<>12 THEN LOCATE TY,TX:PRINT" "; 7120 SOUND 220,0.2 7130 TX=TX+X(D(TP)):TY=TY+Y(D(TP)):TP=(TP+1)AND 1023 7140 IF TP<>HP THEN 7100 7200 LEVEL=LEVEL+1:GOTO 800 8900 DATA"OPEN","KEY", ,"CLOSE" 8910 DATA"LOAD","THEN","CLOSE", 8920 DATA ,"SCREEN","OPEN","LOAD" 8930 DATA"SCREEN", ,"KEY","THEN" 8940 DATA"SPC(","<0xB5!>","USR","PSET" 9000 COLOR 15,0:LOCATE 25,5:PRINT"<SPACE> TO PLAY, <ESC> TO EXIT"; 9010 WHILE INKEY$<>"":WEND 9020 K$=INKEY$:IF K$="" THEN 9020 9030 IF K$=CHR$(27) THEN 10000 9040 IF K$<>" " THEN 9020 ELSE LOCATE 25,1:PRINTSPACE$(39);:RETURN 9100 LOCATE 25,14:COLOR 9:PRINT"Press <SPACE>";:COLOR 15:GOTO 9010 10000 RUN"menu 10900 LOCATE 10,16:COLOR 10:PRINT"KEYTHENTHENTHENTHENTHENTHENTHENTHEN<0xB5!> 10910 LOCATE,16:PRINT"OPEN";:COLOR 15:PRINT"PacWorm";:COLOR 10:PRINT"CLOSE 10920 LOCATE,16:PRINT"SCREENTHENTHENTHENTHENTHENTHENTHENLOAD":COLOR 15 10940 LOCATE 23,1:PRINT"Press ? for instructions 10950 LOCATE 24,1:PRINT"Press <SPACE> to play"; 10960 LOCATE 25,1:PRINT"Press <ESC> to EXIT"; 10970 RN=RN MOD 32766+1:K$=INKEY$:IF K$="" THEN 10970 10980 IF K$="?" OR K$="/" THEN RANDOMIZE RN:GOTO 11000 10982 IF K$=CHR$(27) THEN 10000 10990 IF K$<>" " THEN 10970 ELSE CLS:RANDOMIZE RN:RETURN 11000 CLS:PRINT"This is PacWorm: ";:COLOR 10:PRINT"KEYTHENTHENTHENTHENTHENTHEN<0xB5!>":COLOR 15 11010 PRINT"This is its food: ";:COLOR 20:PRINT"<UNK! {FE22}>:COLOR 15 11020 PRINT:PRINT" You guide PacWorm through its world,":PRINT"but be careful! It will die if you hit":PRINT"its head against anything but food. 11030 PRINT" Use these keys to move PacWorm:":PRINT 11040 PRINT "ABSOLUTE:"TAB(18)"North 11050 PRINT TAB(20)CHR$(24) 11060 PRINT TAB(17)"VARPTRSOUNDBSAVESOUNDBSAVESOUNDCOLOR 11070 PRINT TAB(17)"CALL CALL8CALL CALL 11080 PRINT TAB(17)"BLOADSOUNDBEEPSOUNDBEEPSOUND<0xB4!> 11090 PRINT TAB(12)"West"CHR$(27)"CALL4CALL CALL6CALL"CHR$(26)"East 11100 PRINT TAB(17)"BLOADSOUNDBEEPSOUNDBEEPSOUND<0xB4!> 11110 PRINT TAB(17)"CALL CALL2CALL CALL 11120 PRINT TAB(17)"CLSSOUNDMOTORSOUNDMOTORSOUND' 11130 PRINT TAB(20)CHR$(25) 11140 PRINT TAB(18)"South 11150 PRINT"or RELATIVE: 11160 PRINT TAB(15)"VARPTRSOUNDSOUNDSOUNDBSAVESOUNDSOUNDSOUNDCOLOR 11170 PRINT"Turn Left PSETTHENCLOSE CALLInsCALLDelCALL KEYTHEN<0xB5!> Turn Right 11180 PRINT TAB(15)"CLSSOUNDSOUNDSOUNDMOTORSOUNDSOUNDSOUND' 11190 GOSUB 9100:CLS 11200 PRINT" PacWorm enters its world thru the gap 11210 PRINT"at the bottom of your screen. You then 11220 PRINT"guide it to eat the ";:COLOR 20:PRINT"<UNK! {FE22}>;:COLOR 15:PRINT" that appears at 11230 PRINT"some random location on the screen. 11240 PRINT" But don't take too long! The line 11250 PRINT"right below the playing field shrinks 11260 PRINT"as you spend time manuevering PacWorm 11270 PRINT"around its world. If you take too long 11280 PRINT"three more ";:COLOR 20:PRINT"<UNK! {FE22}>;:COLOR 15:PRINT"'s appear on the screen. 11290 PRINT" As PacWorm eats its food, it grows in 11300 PRINT"length. Soon you will have trouble 11310 PRINT"keeping PacWorm from running into its 11320 PRINT"own tail! 11330 PRINT" But don't worry, after eating ten ";:COLOR 20:PRINT"<UNK! {FE22}>;:COLOR 15:PRINT"'s 11340 PRINT"(and any others for being slow) PacWorm 11350 PRINT"may leave this world to reappear in the 11360 PRINT"next (more complicated) world back as 11370 PRINT"its old short self! 11380 PRINT" You start with three PacWorms, but 11390 PRINT"you earn more at 5000, 10000, 20000, 11400 PRINT"40000, etc. Food starts at 100 points 11410 PRINT"and doubles at each level. Bonus is 11420 PRINT"awarded for each level the first worm 11430 PRINT"survives."; 11440 GOTO 9100